package com.alipay.service;


import com.alipay.model.dto.Request;
import com.alipay.model.dto.Response;

/**
 * @author Jun
 */
public interface TransferAccountsService {
    /**
     * 接口规范： 定义接口规范、校验参数合法性及有效性，返回可识别的错误码
     * 安全：采用了MD5加签的方式，用秘钥对传输数据进行最MD5签名，数据接收后，进行验签，防止篡改
     * 幂等：通过任务消息表唯一索引以及与业务表同一事务的方式进行幂等控制。
     * 重试：MQ重试，异步任务重试。
     * 并发：使用乐观锁和唯一索引、事务进行并发的控制
     * 异常分支：考虑安全性校验不通过、参数校验不通过、重试不通过、余额不足、扣款付款失败等情况
     * 事务一致性保障的核心思路，遵循BASE理论，采用最终一致性的方式解决
     * 用户投诉，使用枚举定义错误，客户端可以根据枚举类型对前端用户进行友好的提示
     * 资金安全：通过乐观锁保证不扣错，使用唯一约束和事务保证不重复扣
     *
     * @param request
     * @return
     */
    Response transferAccounts(Request request);
}
